import pymysql



# 初始化
conn = None
cursor = None

# 业务处理
try: # 自动提交被关闭，如果开启自动提交则立即提交，回滚无效
    conn = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',db='books',charset='utf8',autocommit=False)

    # 获取游标
    cursor = conn.cursor()

    # 执行sql
    sql = "insert into t_book(id,title,pub_date) values(4, '西游记', '1986-01-01');"

    cursor.execute(sql)
    print(cursor.rowcount)
    print('-' * 20)

    # 主动抛出异常
    raise  Exception("程序出错啦>>")

    # 因为异常第二条sql不会执行
    sql = "insert into t_hero(name,gender,book_id) values('孙悟空', 1, 4)"
    cursor.execute(sql)
    print(cursor.rowcount)

    # 提交事务
    conn.commit() # 手动提交

except Exception as e: # 异常上一条sql不执行直接到except
    # 回滚数据
    conn.rollback() # 因此第一条sql的插入被撤销

    # 打印异常信息
    print(e)

finally:
    # 关闭游标
    if cursor:
        cursor.close()
    # 关闭连接
    if conn:
        conn.close()